package com.zhang.common.constant;

import com.zhang.common.exception.BaseException;

import java.util.Arrays;

/**
 * @author zhangshuaiyin
 * @date 2021/5/31 21:58
 */
public enum ErrorMessage {
    /**
     * 成功
     */
    SUCCESS("200", "success"),

    /**
     * 配置文件错误码
     */
    CONFIG_ERROR("YML01001", "配置文件错误"),
    /**
     * 系统异常
     */
    SYSTEM_ERROR("999999", "系统异常, 请联系管理员"),
    INVALID_PARAM("A00001", "报文参数校验不通过"),

    /**
     * 文件上传错误码
     */
    FILE_UPLOAD_EMPTY("FE03001", "文件为空"),
    FILE_SIZE_ZERO("FE03002", "文件大小为空，上传失败"),
    FILE_UPLOAD_FAILD("FE03003", "文件上传失败"),
    FILE_PARSE_ERROR("FE03004", "文件解析异常"),
    FILE_CONTENT_EMPTY("FE03005", "文件内容为空"),
    FILE_CREATE_FAILD("FE03006", "文件创建失败"),
    FILE_NOT_EXISTS("FE03007", "文件记录不存在"),
    FILE_ID_EMPTY("FE03008", "文件编号为空"),
    FILE_ROWS_LIMIT_OVER("FE03009", "文件记录数超出限制"),
    FILE_TYPE_NOT_SUPPORT("FE03010", "暂不支持当前文件类型"),



    //数据库错误
    DB_UPDATE_FAILD("DB01001", "数据库更新失败"),
    DB_INSERT_FAILD("DB01003", "数据库新增失败"),
    DB_OPR_EXP("DB01002", "数据库异常"),

    ;

    /**
     * 错误代码
     */
    private final String code;
    /**
     * 错误信息
     */
    private final String message;

    /**
     * 构造方法
     *
     * @param code    错误代码
     * @param message 错误描述
     */
    ErrorMessage(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 错误码映射枚举对象
     *
     * @param errorCode 错误代码
     * @return 枚举对象
     */
    public static ErrorMessage of(String errorCode) {
        return Arrays.stream(ErrorMessage.values())
                .filter(code -> code.equalsWith(errorCode))
                .findFirst()
                .orElse(null);
    }

    /**
     * 错误代码
     *
     * @param errorCode 错误代码
     * @return 是否存在错误代码
     */
    public boolean equalsWith(String errorCode) {
        return this.getCode().equals(errorCode);
    }

    /**
     * 获取错误代码
     *
     * @return 错误代码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取错误描述
     *
     * @return 错误描述
     */
    public String getMessage() {
        return message;
    }

    /**
     * 获取错误异常
     *
     * @return 错误异常
     */
    public BaseException getBaseException() {
        return new BaseException(this.getCode(), this.getMessage());
    }
}
